/**
 * @author: Gene
 * @age: 永远18岁的美少年
 * @Email： yangjianyun@58.com
 * @date: 2021-11-30 20:30:51
 * @description: 实现 webpack 源码
 *  webpack 实际上是一个 函数
 */
const Compiler = require("./Compiler")

function webpack(options) {
    // 1. 初始化参数：从配置文件和 Shell 语句中读取并合并参数,得出最终的配置对象
    // console.log(123123, process.argv); // 打印出是一个数组, 前两项是 node 可执行文件路径,和 脚本路径, 第三项之后是 argv 参数
    const argv = process.argv.slice(2) // [ --mode=development]
    const shellOptions = argv.reduce((shellOptions, options) => {
        let [key, value] = options.split("=");
        shellOptions[key.slice(2)] = value
        return shellOptions
    }, {})
    const finalOptions = {...options, ...shellOptions}
    // console.log(finalOptions);
    // 2. 用上一步得到的参数初始化 Compiler 对象
    let compiler = new Compiler(finalOptions)

    // 3. 加载所有配置的插件
    console.log(finalOptions);
    finalOptions.plugins.forEach((plugin) => plugin.apply(compiler))
    return compiler
}

module.exports = webpack